Day 22 dp, 수학, 조건문, 배열

Day22 22단계 2023-11-11

1. 저주의 숫자 3

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= n; i++) {
        	answer++;
            while (answer%3 == 0 || answer%10 == 3 || answer/10 == 3 || (answer/10)%10 == 3) 
                answer++;
        }
        return answer;
    }
}
for (int i = 1; i <= n; i++) {
    answer++;
    if (answer%3 == 0 || String.valueOf(answer).contains("3")) 
    i--;
}

3. 겹치는 선분의 길이

class Solution {
    public int solution(int[][] lines) {
		int start = Math.min(lines[2][0], Math.min(lines[0][0], lines[1][0]));
		int end = Math.max(lines[2][1], Math.max(lines[0][1], lines[1][1]));

		int[] arr = new int[end - start + 1];
		for (int i = lines[0][0]; i <= lines[0][1]; i++) arr[i - start]++;
		for (int i = lines[1][0]; i <= lines[1][1]; i++) arr[i - start]++;
		for (int i = lines[2][0]; i <= lines[2][1]; i++) arr[i - start]++;

		int answer = 0;
		int same = 0;
		a:for (int j = 0; j < arr.length -1; j++) {
			if (arr[j] >= 2 && arr[j+1] >= 2) {
					if ((j+start) >= lines[0][0] && (j+start) <= lines[0][1] &&
						(j+1+start) >= lines[0][0] && (j+1+start) <= lines[0][1]) {
						same++;
					}
					if ((j+start) >= lines[1][0] && (j+start) <= lines[1][1] &&
						(j+1+start) >= lines[1][0] && (j+1+start) <= lines[1][1]) {
						same++;
					}
					if ((j+start) >= lines[2][0] && (j+start) <= lines[2][1] &&
						(j+1+start) >= lines[2][0] && (j+1+start) <= lines[2][1]) {
						same++;
					}
					if(same >= 2) answer++;
			}
		}
        return answer;
    }
}
int answer = 0;
for (int i = -100; i < 100; i++) {
    int line = 0;
    if (lines[0][0]<=i && lines[0][1]>i) line++;
    if (lines[1][0]<=i && lines[1][1]>i) line++;
    if (lines[2][0]<=i && lines[2][1]>i) line++;

    if(line > 1) answer++;
}
return answer;

4. 유한소수 판별하기

import java.math.BigDecimal;
class Solution { 
    public int solution(int a, int b) {
		BigDecimal aBig = new BigDecimal(a);
		BigDecimal bBig = new BigDecimal(b);
		try {
			if (aBig.divide(bBig).scale()>=0)
			return 1;
		} catch (ArithmeticException e) {
			return 2;
		}
        return 2;
    }
}
public static getGCD(int num1, int num2) {
	if (num1 % num2 == 0) return num2;
	return getGCD(num2, num1 % num2);
}

class Solution { 
    public int solution(int a, int b) {
		b /= getGCD(a, b);
		while (b != 1) {
			if (b % 2 == 0) {
				b /= 2;
				continue;
			}
			if (b % 5 == 0) {
				b /= 5;
				continue;
			}
			return 2; // 조건문들을 통과하지 않았다면 이 곳으로 온다
		}
		return 1; // 유한 소수 조건에 만족하면 이 곳으로 온다.
    }
}